﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Linq;
using System.Text;
using RogerioCoimbra.DivulgacaoEspirita.InfraEstrutura.Seguranca;

namespace RogerioCoimbra.DivulgacaoEspirita.Dominio.Entidade
{
    /// <summary>
    /// Parte da classe Usuario
    /// </summary>
    [MetadataType(typeof(Metadata.UsuarioMetadata))]
    public partial class Usuario : IEntidadeBase
    {
        #region IEntidadeBase Members
        /// <summary>
        /// Preencher dados Auxiliares.
        /// </summary>
        /// <param name="usuarioLogado"></param>
        void IEntidadeBase.PreencherDadosAuxiliares(Usuario usuarioLogado)
        {
			DateTime dataAtual = DateTime.Now;

			switch (EntityState)
			{
				case EntityState.Added:

					DataCriacao = dataAtual;
					UsuarioCriacao = usuarioLogado;

					if (this.Senha != null)
						this.Senha = CriptografiaSHA256.CalcularHash(Senha);

					break;

				case EntityState.Modified:

					if (this.Senha != null)
						this.Senha = CriptografiaSHA256.CalcularHash(Senha);

					break;

				case EntityState.Deleted:

					if (this.idUsuario == usuarioLogado.idUsuario)
						throw (new DominioException("O usuário logado não pode excluir o registro do seu proprio usuário."));

					break;
			}
        }
        #endregion
    }
}
